// CodeGear C++Builder
// Copyright (c) 1995, 2015 by Embarcadero Technologies, Inc.
// All rights reserved

// (DO NOT EDIT: machine generated header) 'ocv.comp.Types.pas' rev: 30.00 (Windows)

#ifndef Ocv_Comp_TypesHPP
#define Ocv_Comp_TypesHPP

#pragma delphiheader begin
#pragma option push
#pragma option -w-      // All warnings off
#pragma option -Vx      // Zero-length empty class member 
#pragma pack(push,8)
#include <System.hpp>
#include <SysInit.hpp>
#include <Winapi.Windows.hpp>
#include <System.SysUtils.hpp>
#include <System.Classes.hpp>
#include <System.Generics.Collections.hpp>
#include <System.Types.hpp>
#include <Vcl.Graphics.hpp>
#include <ocv.core_c.hpp>
#include <ocv.core.types_c.hpp>
#include <System.UITypes.hpp>

//-- user supplied -----------------------------------------------------------

namespace Ocv
{
namespace Comp
{
namespace Types
{
//-- forward type declarations -----------------------------------------------
struct TocvRect;
typedef void *TocvRectHelper;

struct TocvLine;
struct TocvCircle;
struct TocvPixel;
__interface IocvFont;
typedef System::DelphiInterface<IocvFont> _di_IocvFont;
__interface IocvCanvas;
typedef System::DelphiInterface<IocvCanvas> _di_IocvCanvas;
__interface IocvImage;
typedef System::DelphiInterface<IocvImage> _di_IocvImage;
class DELPHICLASS TocvFont;
class DELPHICLASS TocvCanvas;
class DELPHICLASS TocvImage;
__interface IocvDataReceiver;
typedef System::DelphiInterface<IocvDataReceiver> _di_IocvDataReceiver;
__interface IocvDataSource;
typedef System::DelphiInterface<IocvDataSource> _di_IocvDataSource;
class DELPHICLASS TocvReceiverList;
class DELPHICLASS TocvDataSource;
class DELPHICLASS TocvDataReceiver;
class DELPHICLASS TocvDataSourceAndReceiver;
struct TocvHaarCascadeRecord;
//-- type declarations -------------------------------------------------------
struct DECLSPEC_DRECORD TocvRect
{
private:
	int __fastcall GetWidth(void);
	void __fastcall SetWidth(const int Value);
	int __fastcall GetHeight(void);
	void __fastcall SetHeight(const int Value);
	System::Types::TSize __fastcall GetSize(void);
	void __fastcall SetSize(const System::Types::TSize &Value);
	System::Types::TPoint __fastcall GetLocation(void);
	
public:
	__fastcall TocvRect(const System::Types::TPoint &Origin)/* overload */;
	__fastcall TocvRect(const System::Types::TPoint &Origin, int Width, int Height)/* overload */;
	__fastcall TocvRect(const int Left, const int Top, const int Right, const int Bottom)/* overload */;
	__fastcall TocvRect(const System::Types::TPoint &P1, const System::Types::TPoint &P2, bool Normalize)/* overload */;
	__fastcall TocvRect(const System::Types::TRect &R, bool Normalize)/* overload */;
	static bool __fastcall _op_Equality(const System::Types::TRect &Lhs, const System::Types::TRect &Rhs);
	static bool __fastcall _op_Inequality(const System::Types::TRect &Lhs, const System::Types::TRect &Rhs);
	static System::Types::TRect __fastcall _op_Addition(const System::Types::TRect &Lhs, const System::Types::TRect &Rhs);
	static System::Types::TRect __fastcall _op_Multiply(const System::Types::TRect &Lhs, const System::Types::TRect &Rhs);
	static System::Types::TRect __fastcall Empty();
	void __fastcall NormalizeRect(void);
	bool __fastcall IsEmpty(void);
	bool __fastcall Contains(const System::Types::TPoint &Pt)/* overload */;
	bool __fastcall Contains(const System::Types::TRect &R)/* overload */;
	bool __fastcall IntersectsWith(const System::Types::TRect &R);
	static System::Types::TRect __fastcall Intersect(const System::Types::TRect &R1, const System::Types::TRect &R2)/* overload */;
	void __fastcall Intersect(const System::Types::TRect &R)/* overload */;
	static System::Types::TRect __fastcall Union(const System::Types::TRect &R1, const System::Types::TRect &R2)/* overload */;
	void __fastcall Union(const System::Types::TRect &R)/* overload */;
	static System::Types::TRect __fastcall Union(System::Types::TPoint const *Points, const int Points_High)/* overload */;
	void __fastcall Offset(const int DX, const int DY)/* overload */;
	void __fastcall Offset(const System::Types::TPoint &Point)/* overload */;
	void __fastcall SetLocation(const int X, const int Y)/* overload */;
	void __fastcall SetLocation(const System::Types::TPoint &Point)/* overload */;
	void __fastcall Inflate(const int DX, const int DY)/* overload */;
	void __fastcall Inflate(const int DL, const int DT, const int DR, const int DB)/* overload */;
	System::Types::TPoint __fastcall CenterPoint(void);
	System::Types::TRect __fastcall SplitRect(System::Types::TSplitRectType SplitType, int Size)/* overload */;
	System::Types::TRect __fastcall SplitRect(System::Types::TSplitRectType SplitType, double Percent)/* overload */;
	__property int Width = {read=GetWidth, write=SetWidth};
	__property int Height = {read=GetHeight, write=SetHeight};
	__property System::Types::TSize Size = {read=GetSize, write=SetSize};
	__property System::Types::TPoint Location = {read=GetLocation, write=SetLocation};
	TocvRect() {}
	
public:
	union
	{
		struct 
		{
			System::Types::TPoint TopLeft;
			System::Types::TPoint BottomRight;
		};
		struct 
		{
			int Left;
			int Top;
			int Right;
			int Bottom;
		};
		
	};
};


struct DECLSPEC_DRECORD TocvLine
{
public:
	Ocv::Core::Types_c::TCvPoint S;
	Ocv::Core::Types_c::TCvPoint E;
};


struct DECLSPEC_DRECORD TocvCircle
{
public:
	int cX;
	int cY;
	int Radius;
};


enum DECLSPEC_DENUM TocvColorEncode : unsigned char { ceRGB, ceGRAY };

struct DECLSPEC_DRECORD TocvPixel
{
	
public:
	TocvColorEncode c;
	union
	{
		struct 
		{
			System::Byte GV;
		};
		struct 
		{
			System::Byte R;
			System::Byte G;
			System::Byte B;
		};
		
	};
};


typedef System::DynamicArray<TocvRect> TocvRects;

typedef System::DynamicArray<TocvCircle> TocvCircles;

typedef System::DynamicArray<TocvLine> TocvLines;

enum DECLSPEC_DENUM TocvLineType : unsigned char { LT_FILLED, LT_8, LT_AA };

__interface  INTERFACE_UUID("{3EAFF1CE-7C65-4138-829F-329C81DDED8F}") IocvFont  : public System::IInterface 
{
	virtual System::UnicodeString __fastcall GetFontName(void) = 0 ;
	virtual void __fastcall SetFontName(const System::UnicodeString Value) = 0 ;
	virtual System::Uitypes::TColor __fastcall GetFontColor(void) = 0 ;
	virtual void __fastcall SetFontColor(const System::Uitypes::TColor Value) = 0 ;
	virtual int __fastcall GetFontThickness(void) = 0 ;
	virtual void __fastcall SetFontThickness(const int Value) = 0 ;
	virtual TocvLineType __fastcall GetFontLineType(void) = 0 ;
	virtual void __fastcall SetFontLineType(const TocvLineType Value) = 0 ;
	virtual float __fastcall GetFontHScale(void) = 0 ;
	virtual void __fastcall SetFontHScale(const float Value) = 0 ;
	virtual float __fastcall GetFontVScale(void) = 0 ;
	virtual void __fastcall SetFontVScale(const float Value) = 0 ;
	virtual Ocv::Core_c::TCvFont __fastcall GetCvFont(void) = 0 ;
	__property System::UnicodeString Name = {read=GetFontName, write=SetFontName};
	__property System::Uitypes::TColor Color = {read=GetFontColor, write=SetFontColor};
	__property int Thickness = {read=GetFontThickness, write=SetFontThickness};
	__property TocvLineType LineType = {read=GetFontLineType, write=SetFontLineType};
	__property float HScale = {read=GetFontHScale, write=SetFontHScale};
	__property float VScale = {read=GetFontVScale, write=SetFontVScale};
	__property Ocv::Core_c::TCvFont cvFont = {read=GetCvFont};
};

__interface  INTERFACE_UUID("{D5BCBC44-8139-42A7-A97A-0A5AD33C6526}") IocvCanvas  : public System::IInterface 
{
	virtual _di_IocvFont __fastcall GetOcvFont(void) = 0 ;
	__property _di_IocvFont ocvFont = {read=GetOcvFont};
	virtual void __fastcall Rectangle(const int x1, const int y1, const int x2, const int y2, const System::Uitypes::TColor Color = (System::Uitypes::TColor)(0xff), const int Thickness = 0x1, const TocvLineType LineType = (TocvLineType)(0x1), const int Shift = 0x0) = 0 /* overload */;
	virtual void __fastcall Rectangle(const TocvRect &ARect, const System::Uitypes::TColor Color = (System::Uitypes::TColor)(0xff), const int Thickness = 0x1, const TocvLineType LineType = (TocvLineType)(0x1), const int Shift = 0x0) = 0 /* overload */;
	virtual void __fastcall Circle(const int x, const int y, const int R, const System::Uitypes::TColor Color = (System::Uitypes::TColor)(0xff), const int Thickness = 0x1, const TocvLineType LineType = (TocvLineType)(0x1), const int Shift = 0x0) = 0 ;
	virtual void __fastcall Ellipse(const int CenterX, const int CenterY, const TocvRect &Axes, const double Angle, const double start_angle, const double nd_angle, const System::Uitypes::TColor Color = (System::Uitypes::TColor)(0xff), const int Thickness = 0x1, const TocvLineType LineType = (TocvLineType)(0x1), const int Shift = 0x0) = 0 ;
	virtual void __fastcall EllipseBox(const TocvRect &Box, const float Angle, const System::Uitypes::TColor Color = (System::Uitypes::TColor)(0xff), const int Thickness = 0x1, const TocvLineType LineType = (TocvLineType)(0x1), const int Shift = 0x0) = 0 /* overload */;
	virtual void __fastcall EllipseBox(const Ocv::Core::Types_c::TCvBox2D &Box, const System::Uitypes::TColor Color = (System::Uitypes::TColor)(0xff), const int Thickness = 0x1, const TocvLineType LineType = (TocvLineType)(0x1), const int Shift = 0x0) = 0 /* overload */;
	virtual void __fastcall TextOut(const int x, const int y, const System::UnicodeString Text, const bool Shadow = false) = 0 ;
};

__interface  INTERFACE_UUID("{84567F57-A399-4179-AA0F-6F8A2788F89B}") IocvImage  : public System::IInterface 
{
	virtual Ocv::Core::Types_c::pIplImage __fastcall GetIplImage(void) = 0 ;
	virtual bool __fastcall GetisGray(void) = 0 ;
	virtual _di_IocvImage __fastcall GrayImage(void) = 0 ;
	virtual _di_IocvImage __fastcall Clone(void) = 0 ;
	virtual _di_IocvImage __fastcall Same(void) = 0 ;
	virtual Vcl::Graphics::TBitmap* __fastcall AsBitmap(void) = 0 ;
	virtual _di_IocvImage __fastcall Crop(const Ocv::Core::Types_c::TCvRect &roi) = 0 ;
	virtual int __fastcall GetWidth(void) = 0 ;
	virtual int __fastcall GetHeight(void) = 0 ;
	virtual _di_IocvCanvas __fastcall GetCanvas(void) = 0 ;
	virtual _di_IocvImage __fastcall Resize(const int nW, const int nH, const int interpolation = 0x1) = 0 ;
	virtual _di_IocvImage __fastcall Scale(const float dw, const float dh, const int interpolation = 0x1) = 0 ;
	virtual TocvPixel __fastcall GetPixel(const int x, const int y) = 0 ;
	virtual void __fastcall SetPixel(const int x, const int y, const TocvPixel P) = 0 ;
	__property Ocv::Core::Types_c::pIplImage IpImage = {read=GetIplImage};
	__property bool isGray = {read=GetisGray};
	__property int Width = {read=GetWidth};
	__property int Height = {read=GetHeight};
	__property _di_IocvCanvas Canvas = {read=GetCanvas};
	__property TocvPixel Pixel[const int x][const int y] = {read=GetPixel, write=SetPixel};
};

class PASCALIMPLEMENTATION TocvFont : public System::TInterfacedObject
{
	typedef System::TInterfacedObject inherited;
	
private:
	Ocv::Core_c::TCvFont FCvFont;
	System::Uitypes::TColor FFontColor;
	TocvLineType FFontLineType;
	void __fastcall CreateOcvFont(void);
	
protected:
	System::UnicodeString __fastcall GetFontName(void);
	void __fastcall SetFontName(const System::UnicodeString Value);
	System::Uitypes::TColor __fastcall GetFontColor(void);
	void __fastcall SetFontColor(const System::Uitypes::TColor Value);
	int __fastcall GetFontThickness(void);
	void __fastcall SetFontThickness(const int Value);
	TocvLineType __fastcall GetFontLineType(void);
	void __fastcall SetFontLineType(const TocvLineType Value);
	float __fastcall GetFontHScale(void);
	void __fastcall SetFontHScale(const float Value);
	float __fastcall GetFontVScale(void);
	void __fastcall SetFontVScale(const float Value);
	Ocv::Core_c::TCvFont __fastcall GetCvFont(void);
	
public:
	__fastcall TocvFont(void);
	__property System::UnicodeString Name = {read=GetFontName, write=SetFontName};
	__property System::Uitypes::TColor Color = {read=GetFontColor, write=SetFontColor, nodefault};
	__property int Thickness = {read=GetFontThickness, write=SetFontThickness, nodefault};
	__property TocvLineType LineType = {read=GetFontLineType, write=SetFontLineType, nodefault};
	__property float HScale = {read=GetFontHScale, write=SetFontHScale};
	__property float VScale = {read=GetFontVScale, write=SetFontVScale};
	__property Ocv::Core_c::TCvFont cvFont = {read=GetCvFont};
public:
	/* TObject.Destroy */ inline __fastcall virtual ~TocvFont(void) { }
	
private:
	void *__IocvFont;	// IocvFont 
	
public:
	#if defined(MANAGED_INTERFACE_OPERATORS)
	// {3EAFF1CE-7C65-4138-829F-329C81DDED8F}
	operator _di_IocvFont()
	{
		_di_IocvFont intf;
		this->GetInterface(intf);
		return intf;
	}
	#else
	operator IocvFont*(void) { return (IocvFont*)&__IocvFont; }
	#endif
	
};


#pragma pack(push,4)
class PASCALIMPLEMENTATION TocvCanvas : public System::TInterfacedObject
{
	typedef System::TInterfacedObject inherited;
	
private:
	TocvImage* FOwner;
	_di_IocvFont FocvFont;
	
protected:
	_di_IocvFont __fastcall GetOcvFont(void);
	
public:
	__fastcall TocvCanvas(TocvImage* AOwner);
	__fastcall virtual ~TocvCanvas(void);
	void __fastcall Rectangle(const int x1, const int y1, const int x2, const int y2, const System::Uitypes::TColor Color = (System::Uitypes::TColor)(0xff), const int Thickness = 0x1, const TocvLineType LineType = (TocvLineType)(0x1), const int Shift = 0x0)/* overload */;
	void __fastcall Rectangle(const TocvRect &ARect, const System::Uitypes::TColor Color = (System::Uitypes::TColor)(0xff), const int Thickness = 0x1, const TocvLineType LineType = (TocvLineType)(0x1), const int Shift = 0x0)/* overload */;
	void __fastcall Circle(const int CenterX, const int CenterY, const int Radius, const System::Uitypes::TColor Color = (System::Uitypes::TColor)(0xff), const int Thickness = 0x1, const TocvLineType LineType = (TocvLineType)(0x1), const int Shift = 0x0);
	void __fastcall Ellipse(const int CenterX, const int CenterY, const TocvRect &Axes, const double Angle, const double start_angle, const double nd_angle, const System::Uitypes::TColor Color = (System::Uitypes::TColor)(0xff), const int Thickness = 0x1, const TocvLineType LineType = (TocvLineType)(0x1), const int Shift = 0x0);
	void __fastcall EllipseBox(const TocvRect &Box, const float Angle, const System::Uitypes::TColor Color = (System::Uitypes::TColor)(0xff), const int Thickness = 0x1, const TocvLineType LineType = (TocvLineType)(0x1), const int Shift = 0x0)/* overload */;
	void __fastcall EllipseBox(const Ocv::Core::Types_c::TCvBox2D &Box, const System::Uitypes::TColor Color = (System::Uitypes::TColor)(0xff), const int Thickness = 0x1, const TocvLineType LineType = (TocvLineType)(0x1), const int Shift = 0x0)/* overload */;
	void __fastcall TextOut(const int x, const int y, const System::UnicodeString Text, const bool Shadow = false);
	__property _di_IocvFont ocvFont = {read=GetOcvFont};
private:
	void *__IocvCanvas;	// IocvCanvas 
	
public:
	#if defined(MANAGED_INTERFACE_OPERATORS)
	// {D5BCBC44-8139-42A7-A97A-0A5AD33C6526}
	operator _di_IocvCanvas()
	{
		_di_IocvCanvas intf;
		this->GetInterface(intf);
		return intf;
	}
	#else
	operator IocvCanvas*(void) { return (IocvCanvas*)&__IocvCanvas; }
	#endif
	
};

#pragma pack(pop)

#pragma pack(push,4)
class PASCALIMPLEMENTATION TocvImage : public System::TInterfacedObject
{
	typedef System::TInterfacedObject inherited;
	
private:
	Ocv::Core::Types_c::TIplImage *FImage;
	_di_IocvCanvas FocvCanvas;
	
protected:
	Ocv::Core::Types_c::pIplImage __fastcall GetIplImage(void);
	bool __fastcall GetisGray(void);
	int __fastcall GetWidth(void);
	int __fastcall GetHeight(void);
	_di_IocvCanvas __fastcall GetCanvas(void);
	TocvPixel __fastcall GetPixel(const int x, const int y);
	void __fastcall SetPixel(const int x, const int y, const TocvPixel P);
	
public:
	__fastcall TocvImage(void)/* overload */;
	__fastcall TocvImage(const Ocv::Core::Types_c::pIplImage AImage)/* overload */;
	__fastcall TocvImage(Vcl::Graphics::TBitmap* const Bitmap)/* overload */;
	__fastcall TocvImage(const Ocv::Core::Types_c::pIplImage AImage);
	__fastcall TocvImage(const System::UnicodeString FileName);
	__fastcall virtual ~TocvImage(void);
	_di_IocvImage __fastcall GrayImage(void);
	_di_IocvImage __fastcall Clone(void);
	_di_IocvImage __fastcall Same(void);
	Vcl::Graphics::TBitmap* __fastcall AsBitmap(void);
	_di_IocvImage __fastcall Resize(const int nW, const int nH, const int interpolation = 0x1);
	_di_IocvImage __fastcall Scale(const float dw, const float dh, const int interpolation = 0x1);
	_di_IocvImage __fastcall Crop(const Ocv::Core::Types_c::TCvRect &roi);
	__property Ocv::Core::Types_c::pIplImage IplImage = {read=GetIplImage};
	__property bool isGray = {read=GetisGray, nodefault};
	__property Ocv::Core::Types_c::pIplImage IpImage = {read=GetIplImage};
	__property int Width = {read=GetWidth, nodefault};
	__property int Height = {read=GetHeight, nodefault};
	__property _di_IocvCanvas Canvas = {read=GetCanvas};
	__property TocvPixel Pixel[const int x][const int y] = {read=GetPixel, write=SetPixel};
private:
	void *__IocvImage;	// IocvImage 
	
public:
	#if defined(MANAGED_INTERFACE_OPERATORS)
	// {84567F57-A399-4179-AA0F-6F8A2788F89B}
	operator _di_IocvImage()
	{
		_di_IocvImage intf;
		this->GetInterface(intf);
		return intf;
	}
	#else
	operator IocvImage*(void) { return (IocvImage*)&__IocvImage; }
	#endif
	
};

#pragma pack(pop)

typedef void __fastcall (__closure *TOnOcvNotifyCollectionItem)(System::TObject* PrevOperation, System::TObject* Operation, System::TObject* NextOperation, const _di_IocvImage IplImage, bool &ContinueTransform);

typedef void __fastcall (__closure *TOnOcvNotify)(System::TObject* Sender, _di_IocvImage &IplImage);

typedef void __fastcall (__closure *TOnOcvAfterViewPaint)(System::TObject* Sender, const _di_IocvImage IplImage);

typedef TOnOcvNotify TOnOcvAfterTransform;

typedef void __fastcall (__closure *TOnOcvBeforeTransform)(System::TObject* Sender, const _di_IocvImage IplImage, bool &ContinueTransform);

typedef void __fastcall (__closure *TOnOcvContour)(System::TObject* Sender, const _di_IocvImage IplImage, const int ContourCount, const Ocv::Core::Types_c::pCvSeq Contours);

typedef System::DynamicArray<TocvRect> _dt_Ocv_Comp_Types_1;
typedef void __fastcall (__closure *TOnOcvHaarCascade)(System::TObject* Sender, const _di_IocvImage IplImage, const _dt_Ocv_Comp_Types_1 HaarRects);

typedef void __fastcall (__closure *TOnOcvRect)(System::TObject* Sender, const _di_IocvImage IplImage, const TocvRect &Rect);

typedef System::DynamicArray<TocvRect> _dt_Ocv_Comp_Types_2;
typedef void __fastcall (__closure *TOnOcvRects)(System::TObject* Sender, const _di_IocvImage IplImage, const _dt_Ocv_Comp_Types_2 Rects);

typedef System::DynamicArray<TocvCircle> _dt_Ocv_Comp_Types_3;
typedef void __fastcall (__closure *TOnOcvCircles)(System::TObject* Sender, const _di_IocvImage IplImage, const _dt_Ocv_Comp_Types_3 Circles);

typedef System::DynamicArray<TocvLine> _dt_Ocv_Comp_Types_4;
typedef void __fastcall (__closure *TOnOcvLines)(System::TObject* Sender, const _di_IocvImage IplImage, const _dt_Ocv_Comp_Types_4 Lines);

__interface  INTERFACE_UUID("{F67DEC9E-CCE0-49D2-AB9B-AD7E1020C5DC}") IocvDataReceiver  : public System::IInterface 
{
	virtual void __fastcall TakeImage(const _di_IocvImage IplImage) = 0 ;
	virtual void __fastcall SetVideoSource(System::TObject* const Value) = 0 ;
};

__interface  INTERFACE_UUID("{80640C0A-6828-42F8-83E7-DA5FD9036DFF}") IocvDataSource  : public System::IInterface 
{
	virtual void __fastcall AddReceiver(const _di_IocvDataReceiver OpenCVVideoReceiver) = 0 ;
	virtual void __fastcall RemoveReceiver(const _di_IocvDataReceiver OpenCVVideoReceiver) = 0 ;
	virtual System::UnicodeString __fastcall GetName(void) = 0 ;
	virtual _di_IocvImage __fastcall GetImage(void) = 0 ;
	virtual bool __fastcall GetEnabled(void) = 0 ;
	virtual int __fastcall GetHeight(void) = 0 ;
	virtual int __fastcall GetWidth(void) = 0 ;
	virtual double __fastcall GetFPS(void) = 0 ;
	__property bool Enabled = {read=GetEnabled};
	__property _di_IocvImage Image = {read=GetImage};
	__property System::UnicodeString Name = {read=GetName};
	__property int Width = {read=GetWidth};
	__property int Height = {read=GetHeight};
	__property double FPS = {read=GetFPS};
};

#pragma pack(push,4)
class PASCALIMPLEMENTATION TocvReceiverList : public System::Classes::TThreadList
{
	typedef System::Classes::TThreadList inherited;
	
public:
	HIDESBASE void __fastcall Add(_di_IocvDataReceiver Item);
	HIDESBASE void __fastcall Remove(_di_IocvDataReceiver Item);
public:
	/* TThreadList.Create */ inline __fastcall TocvReceiverList(void) : System::Classes::TThreadList() { }
	/* TThreadList.Destroy */ inline __fastcall virtual ~TocvReceiverList(void) { }
	
};

#pragma pack(pop)

class PASCALIMPLEMENTATION TocvDataSource : public System::Classes::TComponent
{
	typedef System::Classes::TComponent inherited;
	
protected:
	TocvReceiverList* FOpenCVVideoReceivers;
	_di_IocvImage FImage;
	int FWidth;
	int FHeight;
	double FFPS;
	virtual System::UnicodeString __fastcall GetName(void);
	virtual void __fastcall NotifyReceiver(const _di_IocvImage IplImage);
	_di_IocvImage __fastcall GetImage(void);
	virtual bool __fastcall GetEnabled(void);
	virtual int __fastcall GetHeight(void);
	virtual int __fastcall GetWidth(void);
	virtual double __fastcall GetFPS(void);
	
public:
	__fastcall virtual TocvDataSource(System::Classes::TComponent* AOwner);
	__fastcall virtual ~TocvDataSource(void);
	virtual void __fastcall AddReceiver(const _di_IocvDataReceiver OpenCVVideoReceiver);
	virtual void __fastcall RemoveReceiver(const _di_IocvDataReceiver OpenCVVideoReceiver);
	__property _di_IocvImage Image = {read=GetImage};
private:
	void *__IocvDataSource;	// IocvDataSource 
	
public:
	#if defined(MANAGED_INTERFACE_OPERATORS)
	// {80640C0A-6828-42F8-83E7-DA5FD9036DFF}
	operator _di_IocvDataSource()
	{
		_di_IocvDataSource intf;
		this->GetInterface(intf);
		return intf;
	}
	#else
	operator IocvDataSource*(void) { return (IocvDataSource*)&__IocvDataSource; }
	#endif
	
};


class PASCALIMPLEMENTATION TocvDataReceiver : public System::Classes::TComponent
{
	typedef System::Classes::TComponent inherited;
	
private:
	_di_IocvDataSource FocvVideoSource;
	
protected:
	virtual void __fastcall SetVideoSource(System::TObject* const Value);
	virtual void __fastcall SetOpenCVVideoSource(const _di_IocvDataSource Value);
	
public:
	virtual void __fastcall TakeImage(const _di_IocvImage IplImage);
	__fastcall virtual ~TocvDataReceiver(void);
	virtual bool __fastcall isSourceEnabled(void);
	
__published:
	__property _di_IocvDataSource VideoSource = {read=FocvVideoSource, write=SetOpenCVVideoSource};
public:
	/* TComponent.Create */ inline __fastcall virtual TocvDataReceiver(System::Classes::TComponent* AOwner) : System::Classes::TComponent(AOwner) { }
	
private:
	void *__IocvDataReceiver;	// IocvDataReceiver 
	
public:
	#if defined(MANAGED_INTERFACE_OPERATORS)
	// {F67DEC9E-CCE0-49D2-AB9B-AD7E1020C5DC}
	operator _di_IocvDataReceiver()
	{
		_di_IocvDataReceiver intf;
		this->GetInterface(intf);
		return intf;
	}
	#else
	operator IocvDataReceiver*(void) { return (IocvDataReceiver*)&__IocvDataReceiver; }
	#endif
	
};


class PASCALIMPLEMENTATION TocvDataSourceAndReceiver : public TocvDataSource
{
	typedef TocvDataSource inherited;
	
private:
	_di_IocvDataSource FocvVideoSource;
	
protected:
	virtual void __fastcall SetVideoSource(System::TObject* const Value);
	virtual void __fastcall SetOpenCVVideoSource(const _di_IocvDataSource Value);
	
public:
	virtual void __fastcall TakeImage(const _di_IocvImage IplImage);
	__fastcall virtual ~TocvDataSourceAndReceiver(void);
	
__published:
	__property _di_IocvDataSource VideoSource = {read=FocvVideoSource, write=SetOpenCVVideoSource};
public:
	/* TocvDataSource.Create */ inline __fastcall virtual TocvDataSourceAndReceiver(System::Classes::TComponent* AOwner) : TocvDataSource(AOwner) { }
	
private:
	void *__IocvDataReceiver;	// IocvDataReceiver 
	
public:
	#if defined(MANAGED_INTERFACE_OPERATORS)
	// {F67DEC9E-CCE0-49D2-AB9B-AD7E1020C5DC}
	operator _di_IocvDataReceiver()
	{
		_di_IocvDataReceiver intf;
		this->GetInterface(intf);
		return intf;
	}
	#else
	operator IocvDataReceiver*(void) { return (IocvDataReceiver*)&__IocvDataReceiver; }
	#endif
	
};


enum DECLSPEC_DENUM TocvHaarCascadeType : unsigned char { hcEye, hcEyeTreeEyeglasses, hcFrontalfaceAlt, hcFrontalfaceAlt2, hcFrontalfaceAltTree, hcFrontalfaceDefault, hcFullbody, hcLefteye2splits, hcLowerbody, hcMcsEyepairBig, hcMcsEyepairSmall, hcMcsLeftear, hcMcsLefteye, hcMcsMouth, hcMcsNose, hcMcsRightear, hcMcsRighteye, hcMcsUpperbody, hcProfileface, hcRighteye2splits, hcSmile, hcUpperbody };

enum DECLSPEC_DENUM TocvHaarCascadeFlag : unsigned char { HAAR_DO_CANNY_PRUNING, HAAR_SCALE_IMAGE, HAAR_FIND_BIGGEST_OBJECT, HAAR_DO_ROUGH_SEARCH };

typedef System::Set<TocvHaarCascadeFlag, TocvHaarCascadeFlag::HAAR_DO_CANNY_PRUNING, TocvHaarCascadeFlag::HAAR_DO_ROUGH_SEARCH> TocvHaarCascadeFlagSet;

struct DECLSPEC_DRECORD TocvHaarCascadeRecord
{
public:
	System::UnicodeString Name;
	System::UnicodeString FileName;
};


typedef System::StaticArray<TocvHaarCascadeRecord, 22> Ocv_Comp_Types__8;

//-- var, const, procedure ---------------------------------------------------
extern DELPHI_PACKAGE Ocv::Core::Types_c::TA4CVChar cmRGB;
extern DELPHI_PACKAGE Ocv::Core::Types_c::TA4CVChar cmBGR;
extern DELPHI_PACKAGE Ocv::Core::Types_c::TA4CVChar cmGRAY;
extern DELPHI_PACKAGE System::StaticArray<int, 3> cLineType;
extern DELPHI_PACKAGE Ocv_Comp_Types__8 CascadeRecourse;
extern DELPHI_PACKAGE TocvPixel __fastcall ocvPixel(const System::Byte R, const System::Byte G, const System::Byte B);
extern DELPHI_PACKAGE Ocv::Core::Types_c::TCvRect __fastcall cvRect(const TocvRect &oRect);
extern DELPHI_PACKAGE int __fastcall HaarSetToFlag(const TocvHaarCascadeFlagSet CascadeFlags);
extern DELPHI_PACKAGE TocvRect __fastcall ocvRect(int Left, int Top, int Right, int Bottom);
extern DELPHI_PACKAGE TocvRect __fastcall ocvRectCenter(int cX, int cY, int Width, int Height);
extern DELPHI_PACKAGE void __fastcall GetRGBValue(const System::Uitypes::TColor AColor, System::Byte &R, System::Byte &G, System::Byte &B);
extern DELPHI_PACKAGE Ocv::Core::Types_c::TCvScalar __fastcall ColorToCvRGB(const System::Uitypes::TColor Color);
}	/* namespace Types */
}	/* namespace Comp */
}	/* namespace Ocv */
#if !defined(DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE) && !defined(NO_USING_NAMESPACE_OCV_COMP_TYPES)
using namespace Ocv::Comp::Types;
#endif
#if !defined(DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE) && !defined(NO_USING_NAMESPACE_OCV_COMP)
using namespace Ocv::Comp;
#endif
#if !defined(DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE) && !defined(NO_USING_NAMESPACE_OCV)
using namespace Ocv;
#endif
#pragma pack(pop)
#pragma option pop

#pragma delphiheader end.
//-- end unit ----------------------------------------------------------------
#endif	// Ocv_Comp_TypesHPP
